home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / gnu / include / incl98.zoo / string.h < prev    next >
C/C++ Source or Header  |  1993-11-05  |  4KB  |  144 lines

  1. /*
  2.  * String functions.
  3.  */
  4. #ifndef _STRING_H
  5. #define _STRING_H
  6.  
  7. #ifndef _COMPILER_H
  8. #include <compiler.h>
  9. #endif
  10.  
  11. #ifdef __cplusplus
  12. extern "C" {
  13. #endif
  14.  
  15.  
  16. #ifndef _SIZE_T
  17. #define _SIZE_T __SIZE_TYPEDEF__
  18. typedef _SIZE_T size_t;
  19. #endif
  20.  
  21. #ifndef NULL
  22. #define NULL __NULL
  23. #endif
  24.  
  25. __EXTERN void *memcpy __PROTO((void *dst, const void *src, size_t size));
  26. __EXTERN void *memmove __PROTO((void *dst, const void *src, size_t size));
  27. __EXTERN int memcmp __PROTO((const void *s1, const void *s2, size_t size));
  28. __EXTERN void *memchr __PROTO((const void *s, int ucharwanted, size_t size));
  29. __EXTERN void *memset __PROTO((void *s, int ucharfill, size_t size));
  30.  
  31. __EXTERN char *strcpy __PROTO((char *dst, const char *src));
  32. __EXTERN char *strncpy __PROTO((char *dst, const char *src, size_t n));
  33. __EXTERN char *strcat __PROTO((char *dst, const char *src));
  34. __EXTERN char *strncat __PROTO((char *dst, const char *src, size_t n));
  35. __EXTERN int strcmp __PROTO((const char *scan1, const char *scan2));
  36. __EXTERN int strncmp __PROTO((const char *scan1, const char *scan2, size_t n));
  37. __EXTERN int strcoll __PROTO((const char *scan1, const char *scan2));
  38. __EXTERN size_t    strxfrm __PROTO((char *to, const char *from, size_t maxsize));
  39. __EXTERN char *strchr __PROTO((const char *s, int charwanted));
  40. __EXTERN size_t strcspn __PROTO((const char *s, const char *reject));
  41. __EXTERN char *strpbrk __PROTO((const char *s, const char *breakat));
  42. __EXTERN char *strrchr __PROTO((const char *s, int charwanted));
  43. __EXTERN size_t strspn __PROTO((const char *s, const char *accept));
  44. __EXTERN char *strstr __PROTO((const char *s, const char *wanted));
  45. __EXTERN char *strtok __PROTO((char *s, const char *delim));
  46. __EXTERN size_t strlen __PROTO((const char *scan));
  47. __EXTERN char *strerror __PROTO((int errnum));
  48.  
  49. #if !defined(__STRICT_ANSI__) && !defined(_POSIX_SOURCE)
  50. /* 
  51.  * from henry spencers string lib
  52.  *  these dont appear in ansi draft sec 4.11
  53.  */
  54. __EXTERN void *memccpy __PROTO((void *dst, const void *src, int ucharstop, size_t size));
  55. __EXTERN char *strlwr __PROTO((char *string));
  56. __EXTERN char *strupr __PROTO((char *string));
  57. /* CAUTION: there are assumptions elsewhere in the code that strrev()
  58.    reverses in-place
  59.  */
  60. __EXTERN char *strrev __PROTO((char *string));
  61. __EXTERN char *strdup __PROTO((const char *s));
  62.  
  63. /*
  64.  * V7 and BSD compatibility.
  65.  */
  66. __EXTERN char *index __PROTO((const char *s, int charwanted));
  67. __EXTERN char *rindex __PROTO((const char *s, int charwanted));
  68. __EXTERN void bcopy __PROTO((const void *src, void *dst, size_t length));
  69. __EXTERN int bcmp __PROTO((const void *src, const void *dst, size_t n));
  70. __EXTERN void bzero __PROTO((void *b, size_t n));
  71.  
  72. __EXTERN void _bcopy __PROTO((const void *src, void *dst, unsigned long length));
  73. __EXTERN int  _bcmp __PROTO((const void *s1, const void *s2, unsigned long length));
  74. __EXTERN void _bzero __PROTO((void *dst, unsigned long length));
  75.  
  76. __EXTERN int stricmp __PROTO(( const char *, const char * ));
  77. __EXTERN int strnicmp __PROTO(( const char *, const char *, size_t ));
  78. __EXTERN int strcmpi __PROTO(( const char *, const char * ));
  79. __EXTERN int strncmpi __PROTO(( const char *, const char *, size_t ));
  80.  
  81. #endif /* __STRICT_ANSI__ */
  82.  
  83. /* some macro versions of functions. these are faster, but less
  84.    forgiving of NULLs and similar nasties. to use the library functions,
  85.    just #undef the appropriate things.
  86. */
  87.  
  88. #ifdef __GNUC_INLINE__
  89. # ifndef __cplusplus
  90.  
  91. static __inline__
  92. char *
  93. __strcat(char *dst, const char *src)
  94. {
  95.     register char *_dscan;
  96.  
  97.     for (_dscan = dst; *_dscan; _dscan++) ;
  98.     while ((*_dscan++ = *src++)) ;
  99.     return dst;
  100. }
  101.  
  102. static __inline__ 
  103. char *
  104. __strcpy(char *dst, const char *src)
  105. {
  106.     register char *_dscan = dst;
  107.     while ((*_dscan++ = *src++)) ;
  108.     return dst;
  109. }
  110.  
  111. static __inline__
  112. size_t
  113. __strlen(const char *scan)
  114. {
  115.     register const char *_start = scan+1;
  116.     while (*scan++) ;
  117.     return (size_t)((long)scan - (long)_start);
  118. }
  119.  
  120. #define strcat     __strcat
  121. #define strcpy     __strcpy
  122. #define strlen     __strlen
  123.  
  124. # endif /* !__cplusplus */
  125. #endif /* __GNUC_INLINE__ */
  126.  
  127. #if defined(__LATTICE__) && !defined(_NO_INLINE)
  128.  
  129. int __builtin_strcmp (const char *, const char *);
  130. char * __builtin_strcpy (char *, const char *);
  131. size_t __builtin_strlen (const char *);
  132.  
  133. #define strcmp __builtin_strcmp
  134. #define strcpy __builtin_strcpy
  135. #define strlen __builtin_strlen
  136.  
  137. #endif
  138.  
  139. #ifdef __cplusplus
  140. }
  141. #endif
  142.  
  143. #endif /* _STRING_H */
  144.